package model;

import java.util.Vector;

import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

import controler.Table;

/**
 * <p>Title: model.ListeTableModel </p>
 *
 * <p>
 * 	Description: Cette classe est le model d'une javax.swing.JTable, elle sert a peupler la liste (JTable)
 *  de table de jeu.
 * </p>
 *
 * <p>Copyright: (c) 2008 FSSIM</p>
 *
 * <p>Company: FSSImock</p>
 *
 * @author Antoine Farnault
 * @author Augustin Couette
 * @version 1.0
 */
public class ListeTableModel extends AbstractTableModel implements TableModel{

	private static final long serialVersionUID = 1L;
	public Vector<Table> rowsData = new Vector<Table>();    // les donnees de la liste
	/**
	 * Redefinition de la methode getColumnName de AbstractTableModel
	 * Elle donne automatiquement les noms des colonnes
	 * @param column le numero de colonne dont il faut le nom
	 * @return column le nom de la colonne
	 */
	@Override
	 public  String getColumnName(int column) {
         if(column == 0) return "Nom";
         if(column == 1) return "Theme";
         if(column == 2) return "Joueurs";
         if(column == 3) return "Proprietaire";
         if(column == 4) return "Privee";
         return "";
	 }
	
	/**
	 * Redefinition de la methode getColumnCount de AbstractTableModel
	 * Elle donne le nombre de colonnes de la table
	 * @return le nombre de colonne
	 */
	@Override
	public int getColumnCount() {
		return 5;
	}
	
	/**
	 * redefinition de la methode getRowCount de AbstractTableModel
	 * Elle donne automatiquement le nombre de lignes de la table
	 * @return le nombre de lignes
	 */
	@Override
	public int getRowCount() {
		return rowsData.size();
	}
	/**
	 * redefinition de la methode getValueAt de AbstractTableModel
	 * Elle donne la valeur d'une cellule de la table
	 * @param i le numero de colonne
	 * @param j le numero de la ligne
	 * @return l'objet a la ligne j et colonne i
	 * @throws Exception 
	 */
	@Override
	public Object getValueAt(int i, int j) {
		Table t = rowsData.get(i);
		if(j == 0) return (String)t.nom;
		if(j == 1) return (String)t.theme;
		if(j == 2) return t.nombreJoueurs+"/"+t.capacite;
		if(j == 3) return (String)t.proprietaire;
		if(j == 4) if(t.privee){ return "Oui";} else { return "Non";};
		return "Error";
	}
	
	/**
	 * Met la table t a la ligne i
	 * @param i
	 * @param t
	 */
	public void setValueAt(int i,Table t){
		rowsData.set(i, t);
	}
	
	/**
	 * Ajout d'une ligne dans la table
	 * @param table
	 * @param theme
	 * @param joueurs
	 * @param proprietaire
	 * @param privee
	 */
	public void addRow(Table table){
    	rowsData.add(table);
    	//Salle.tables.add(table);
    }
	/**
	 * Retourne une ligne de la table 
	 * @param i
	 * @return
	 * @throws Exception
	 */
	public Table getRow(int i) throws Exception {
		if(i < rowsData.size() && i>=0){
			return rowsData.get(i);
		}else{
			throw new Exception("Invalid i");
		}
	}
	
	/**
	 * Les cellules ne sont pas editable
	 */
	public boolean isCellEditable(int row, int column){
		return false;
	}
}
